package main

import "fmt"

func main() {
	//1.定义一个字典
	//学生ID==》学生名字 idNAME
	var idNames map[int]string //定义一个map，此时这个map,是不能直接赋值的，它是空的

	//2.使用make分配空间,可以不指定长度，但是建议直接指定长度，性能更好
	idScore := make(map[int]float64)
	idNames = make(map[int]string, 10)

	//3.定义时直接分配空间
	//idNames:= make(map[int]string, 10)
	idNames[0] = "duke"
	idNames[1] = "lily"

	//4、遍历map
	for k, v := range idNames {
		fmt.Println("k:", k, "v:", v)
	}

	//5.如何确定一个key是否存在map中
	//在map中不存在访问越界的问题，它认为所有的key都是有效的，所以访问一个不存在的key不会崩溃，返回这个类型的零值
	name9 := idNames[9]
	fmt.Println("name9", name9)              //  空
	fmt.Println("idScore[10]:", idScore[10]) // 0

	//无法通过获取value来判断一个key是否存在，因此我们需要一个能够校验key是否存在的方式
	value, ok := idNames[10]
	if ok {
		fmt.Println("id=10这个key是存在,value为", value)
	} else {
		fmt.Println("id=10这个key不存在,value为", value)
	}
	value, ok = idNames[1]
	if ok {
		fmt.Println("id=10这个key是存在,value为", value)
	} else {
		fmt.Println("id=10这个key不存在,value为", value)
	}

	//6.删除map的元素
	//使用自由函数delete来删除key
	fmt.Println("删除前", idNames)
	delete(idNames, 1)
	delete(idNames, 10)
	fmt.Println("删除后", idNames)

	//并发任务处理时，需要对map进行上锁
}
